GDAS011-基因组级数据中的t检验与多重比较

前言

在上一节中,我们集中研究了一对基因来说明两个方面的变异。其中一个基因似乎在不同的小鼠之间存在着很高的变异,但是这种变异隐藏在了合并数据背后。当我们使用合并的数据对不同的品系小鼠进行统计时,获得的p值在表面上看来是非常低的(p<10e-6),但是当我们使用含有几个代表个体的数据进行比较时,我们发现p值又变得比较大(p=0.089)。在这一节中我们会认识到,找到最令人信服的问题就是要研究生物学变异,只有通过良好的实验设计才能直接检测到生物学变异。准确解释生物学变异的来源(origin)和大小(size)需要合适的统计分析。

在这一节上,我们将会介绍基因组实验中的统计推断,在此,我们需要了解以下几个方面的注意事项:

  • 如果需要进行多次检验,那么对于数以千计的特征值(通常是一个基因)来说,每个特征值至少要经历一次检验;
  • 每个特征值都会表现出自身的技术变异与生物学变异;
  • 有可能存在未检测到或未报道的生物学变异(例如以天为单位时间时,不同时间点的检测)(注:原文是there may be unmeasured or unreported sources of biological variation (such as time of day));
  • 许多特征值有着内在的联系,这些检验并不是独立的。

我们将会使用到前面章节中提到的一些概念,包括t检验和多重比较;在后面部分里,我们将会根据分层模型(hierarchical models)计算标准偏差估计。

我们先加载合并的数据,如下所示:

1
2
3
4
5
library(Biobase)
library(maPooling)
data(maPooling)
pd=pData(maPooling)
individuals=which(rowSums(pd)==1)

现在我们提取单个小鼠及品系,如下所示:

1
2
3
4
individuals=which(rowSums(pd)==1)
individuals=individuals[-grep("tr",names(individuals))]
y=exprs(maPooling)[,individuals]
g=factor(as.numeric(grepl("b",names(individuals))))

T检验

我们可以使用genefilter包中的rowttest函数来进行t检验,如下所示:

1
2
library(genefilter)
tt=rowttests(y,g)

现在我们来找一些哪些基因有统计学意义。由于某些历史原因,在科学研究中,我们判断是否有统计学意义的截止值是p值为0.01或0.05,现在我们找到那些p值小于0.01的基因数目,如下所示:

1
2
3
4
5
6
NsigAt01 = sum(tt$p.value<0.01)
NsigAt01
## [1] 1578
NsigAt05 = sum(tt$p.value<0.05)
NsigAt05
## [1] 2908

多重检验

我们在前面的章节中提到了多重检验(参考笔记DALS017-高维数据推断2-统计原理),现在我们来进行一个快速总结。

我们是否要报道前面提到的名义上的所有的具有显著性的基因?现在让我们来研究一下,如果将第一组分为两组,强制零假设为真,会发生什么情况。

1
2
3
4
5
6
7
8
9
set.seed(0)
shuffledIndex <- factor(sample(c(0,1),sum(g==0),replace=TRUE ))
nulltt <- rowttests(y[,g==0],shuffledIndex)
NfalselySigAt01 = sum(nulltt$p.value<0.01)
NfalselySigAt01
## [1] 79
NfalselySigAt05 = sum(nulltt$p.value<0.05)
NfalselySigAt05
## [1] 840

如果我们使用0.05作为截止值,则将出现840个假阳性。我们在前面部分中已经提到了几种校正方法,其中就包括qvalue包中的qvalue函数。经过这样的调整,我们就能降低假阳性,如下所示:

1
2
3
4
5
6
library(qvalue)
qvals = qvalue(tt$p.value)$qvalue
sum(qvals<0.05)
## [1] 1179
sum(qvals<0.01)
## [1] 538

并且在零亿是高的情况下,也不会产生误报,如下所示:

1
2
3
4
5
6
library(qvalue)
nullqvals = qvalue(nulltt$p.value)$qvalue
sum(nullqvals<0.05)
## [1] 0
sum(nullqvals<0.01)
## [1] 0

这以相当常规的方式解决了在固定名义显著性水平上执行多次假设检验时造成的假阳性问题。

参考资料

  1. Inference: t-tests, multiple comparisons